home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
filesyst
/
dosfs
/
readme.dos
< prev
next >
Wrap
Text File
|
1996-11-17
|
12KB
|
335 lines
MS-DOS FS, ALPHA test version 11
================================
***** This is an ALPHA test version. It might contain bugs that *****
***** will make an MS-DOS FS unusable. Use it only on copies of *****
***** your disks. Never work on original data with it ! *****
FILES
=====
README This file.
CHANGES Change history.
Makefile Makefile for fromdos and rename.
dosfs.patch Patch from alpha.8 to alpha.11
dosfs.tar MS-DOS FS for the 0.99pl7 kernel.
fromdos.c CRLF->NL / NL->CRLF converter.
test.pl Regression test script in Perl.
rename.c Interface to the rename system call. Used by test.pl
smount.c Very simple mount program.
fsperf.c File system performance test.
INSTALLATION
============
This update of the MS-DOS FS can only be added to a 0.99pl7 kernel. You can
either overwrite the old sources by extracting dosfs.tar or patch the
sources from dosfs.patch. Patching is preferred, but many people find it
more convenient to replace the sources from a TAR archive.
Kernel versions later than 0.99pl7 may or may not work with this
source/patch. Please use 0.10 for 0.99pl6 kernels.
Step 1: Kernel
Update the kernel sources if needed and delete all old *.o files that
may be in fs/msdos. Then run make and boot the resulting image.
Step 2: Basic utilities
Run make to compile smount.c, fromdos.c, fsperf.c. Move the resulting
executables to an appropriate place and create a link from 'todos'
to 'fromdos'.
Now you're ready to use the MS-DOS FS. If you have Perl, you should
run the regression test now. (See below.)
MOUNTING
========
An MS-DOS FS is mounted by specifying the FS type "msdos" with the
-t option:
mount -t msdos /dev/whatever /wherever
The following mount options are recognized:
conv=binary|text|auto (default is "binary")
check=relaxed|normal|strict (default is "normal")
uid=<number> (default is current euid)
gid=<number> (default is current egid)
umask=<number> (default is current umask)
debug (default is off)
fat=<number> (default is auto-detection)
The MS-DOS FS can perform CRLF<-->NL (MS-DOS text format to UNIX text
format) conversion in the kernel. The following conversion modes are
available:
binary no translation is performed.
text CRLF<-->NL translation is performed on all files.
auto CRLF<-->NL translation is performed on all files that
don't have a "well-known binary" extension. The list
of known extensions can be found at the beginning of
fs/msdos/misc.c
The conversion mode is chosen with the conv=<mode> mount option, e.g.
mount -t msdos -o conv=auto ...
Programs that do computed lseeks won't like in-kernel text conversion.
For FS' mounted in binary mode, a conversion tool (fromdos/todos) is
provided.
The kernel displays format information at mount time. Please include a
verbatim copy of those numbers in your bug report if the FS should
refuse to mount a valid MS-DOS disk.
When translating a name to MS-DOS conventions, three different levels
of pickyness can be chosen:
relaxed Upper and lower case are accepted and equivalent, long
name parts are truncated (e.g. verlongname.foobar
becomes verylong.foo), leading and embedded spaces are
accepted in each name part (name and extension).
normal Like "relaxed", but many special characters (*, ?, <,
spaces, etc.) are rejected.
strict Like "normal", but names may not contain long parts and
special characters that are sometimes used on Linux,
but are not accepted by MS-DOS are rejected. (+, =,
spaces, etc.)
The check is chosen by specifying the check=<level> mount option,
e.g. mount -t msdos -o check=strict ...
Default is "normal".
The options uid=..., gid=... and umask=... determine the ownership and
permissions of files. All files are implicitly chowned to the specified
uid/gid and the bits in umask are removed from file permissions before
they become visible to user programs. The root of the value of umask
defaults to octal.
The fat option overrides the automatic FAT type detection. Only the
values 12 and 16 are accepted.
The MS-DOS FS prints a version string and a list of file system para-
meters if the option debug is set or if the parameters appear to be
inconsistent.
If the MS-DOS FS detects an inconsistency, it reports an error and sets
the file system read-only. The file system can be made writeable again
by remounting it, e.g. mount -o remount,rw /dev/foo /bar
If the MS-DOS FS and your mount program don't agree on mount option
processing, smount should be used in order to pass mount options. It's
a very simple interface to the mount system call, that doesn't know
about /etc/fstab and doesn't update /etc/mtab.
REGRESSION TEST
===============
A regression test script is included that can be used to verify basic
file system operation. It currently only analyzes the static behaviour
of the FS. No attempt is made to detect race conditions.
To perform the regression test, do the following:
Step 1: rename utility
Because at least some versions of Perl on Linux implement rename by
using link and unlink, a separate C program is used as an interface
to the rename system call. Run make rename to build it. The rename
executable must be in the directory from which test.pl is started.
Step 2: Test location
Insert an empty MS-DOS floppy disk into /dev/fd0 or /dev/fd1. If you
don't have an empty MS-DOS floppy, you can create one with fdformat
and mformat. Mount the floppy as MS-DOS FS, e.g.
mount -t msdos /dev/fd0 /fd
Step 3: Running the script
Run test.pl with the mount point and the name check mode as
arguments, e.g.
./test.pl /fd normal
The regression test only works on an MS-DOS FS, because it tests
special behaviour of that FS type.
Step 4: Checking what's left
The test should not leave any directories or files on the test disk.
The number of free blocks that is reported by df should also be the
same as before the test. Finally, you should be able to umount the
MS-DOS disk.
If any of the above fails, please don't hesitate to report it to
almesber@bernina.ethz.ch
Contribution of new tests that verify yet untested parts of the code or
tests that exhibit bugs will be thankfully accepted.
ACCESS PERMISSIONS
==================
All files in an MS-DOS FS are owned by the real uid/real gid that are
in effect for the mount system call. File modes are 0777 (0666 if the
file system is mounted noexec) minus the current umask at mount time.
Read-only and hidden attributes are translated into appropriate mode
settings. If file modes are changed, an attempt is made to find
sensible attributes based on the mode bits of the owner.
FROMDOS/TODOS
=============
fromdos removes all CRs from a file and truncates it at the first ^Z.
todos converts NLs to CRLFs.
Both tools are either invoked as filters, e.g. fromdos <foo.doc | more
or with one or more file names. Those files are converted in place,
e.g. todos foo.c bar.c gna.c
FSPERF
======
fsperf tests the performance of common file system operations. Unlike
common disk benchmarks, fsperf tries to ignore the time spent moving
data from or to the disk but keeps as much data as possible in the
buffer cache.
In order to get consistent results, the update process should be killed
before running fsperf.
fsperf is invoked as follows:
fsperf path
where path is an unused name in the top-level directory of a file
system. WARNING: fsperf tries to delete any existing file or directory
with that name !
fsperf repeats each set of operations ten times. This can be changed
with the -i option, e.g. fsperf -i 5 /mnt/perf
The size of files created to measure sequential read and write
performance should be considerably lower than the total amount of
physical memory. The file size defaults to 4 MB and can be changed
with the -m option, e.g. fsperf -m 2 /mnt/perf -m 0 disables
sequential file access tests.
The number of directory entries created to measure directory operation
performance defaults to 100. This can be changed with the -e option,
e.g. fsperf -e 1000 /mnt/perf -e 0 disables directory operation
performance tests.
Note:
- fsperf performs expensive operations to ensure good caching between
tests. The reported time multiplied with the number of iterations
and the file size or number of directory operations is therefore
typically only a small fraction of the effective run time.
- directory operations (except directory reads) get slower if the
number of directory entries is increased.
- the effective timer resolution is (100*megabytes) Hz or
(100*entries) Hz.
- the results depend on CPU speed and also to a lesser degree on disk
throughput. Therefore, only timings obtained on the same machine
and with file systems on the same disk should be compared.
- file system fragmentation influences the performance results.
INCOMPATIBILITIES
=================
Any program that does any of the following things may exhibit problems
when used on the MS-DOS FS:
- uses the old readdir library function that isn't based on the
kernel readdir. (Only very old programs do that.) (*)
- tries to use links. (Perl)
- tries to read super blocks and bitmaps to determine the disk
usage. (old df)
- assumes that statfs returns block counts for 1 kB blocks.
There are some more restrictions listed in the known problems section.
KNOWN PROBLEMS
==============
Adaptive text conversion fails for CONFIG.SYS.
The extension .SYS usually indicates that a file is binary. There is
one very prominent exception: CONFIG.SYS ...
Non-root file accesses may yield unexpected errors.
If the "file system owner" is not equal to the user who is accessing
the file system, some programs may generate unusual errors when
modifying or creating files. This happens because all files that are
created on the MS-DOS FS are implicitly chowned to the file system
owner. Work-around: only the user who owns the file system should
have write permission for it.
Neither hard nor soft links are supported.
MS-DOS does not know about symbolic links and "hard links" are only
used for directories. They can't be used for files because there is
no inode level.
Performance may still be poor.
Sometimes, data is read in from the disk just to be overwritten a
few cycles later. May be improved in a later release.
bmap is not supported on certain formats.
MS-DOS formats that have odd cluster sizes or offsets have no block
to block mapping. Therefore, bmap is disabled on such file systems.
This currently only means that you certainly can't swap on them.
File creation fails unexpectedly.
The MS-DOS FS is picky about file names. Usually, only lower case
letters may be used and MS-DOS device names ("con", "nul", etc.)
are not accepted.
readdir returns incorrect inode numbers for files that have been
renamed accross directories while being open.
This can't be fixed without scanning the inode tables for each
entry returned by readdir. Very few programs should notice that
anyway. The inode number is correct ("jumps") as soon as the file
is closed.
Files change their inode numbers when being renamed accross
directories.
This is a design limitation for which no easy fix exists. (See
above.)
CREDITS
=======
Although the code has been heavily modified, it is based on the
original Minix FS by Linus Torvalds and has a certain structural
resemblance to it. Much of the detail know-how about how MS-DOS
manages its disks has been taken from the Mtools package by Emmet P.
Gray.
I'd also like to thank all alpha testers, especially (in alphabetic
order) H. Peter Anvin, Roger Binns, Wayne Davison, Drew Eckhardt,
David Engel, Andrew Haylett, Zane H. Healy, Mika P. Liljeberg, Fabian
Mueller, Andreas Priebe, Asbjorn Riedel, Luca Simoncini, and Eric
Youngdale for reporting problems or success and making valuable
suggestions, and last but not least Hongjiu Lu for quick help on a GCC
problem I hit.
BUG REPORTS AND SUCH
====================
Please send all bug reports to almesber@bernina.ethz.ch